package com.example.test.service;

import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Optional;

/**
 * 基础Service
 */
public interface IBaseService<E, I> {
    <S extends E> S save(S entity);

    <S extends E> Optional<S> findOne(Example<S> example);

    E getOne(I var1);

    Optional<E> findById(I var1);

    List<E> findAll();

    List<E> findAll(Sort var1);

    Page<E> findAll(Pageable var1);

    <S extends E> List<S> findAll(Example<S> var1);

    <S extends E> List<S> findAll(Example<S> var1, Sort var2);

    <S extends E> Page<S> findAll(Example<S> var1, Pageable var2);

    List<E> findAllById(Iterable<I> var1);

    <S extends E> List<S> saveAll(Iterable<S> var1);

    <S extends E> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<E> var1);

    void deleteAllInBatch();

    boolean existsById(I var1);

    <S extends E> boolean exists(Example<S> var1);

    long count();

    <S extends E> long count(Example<S> var1);

    void deleteById(I var1);

    void delete(E var1);

    void deleteAll(Iterable<? extends E> var1);

    void deleteAll();
}
